package com.bjtu.ptsite.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.bjtu.ptsite.model.PromotionRule;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 *
 * @author Zehao Wang, Junjie Zhang, Yutao Wei
 *
 */
@Mapper
public interface PromotionRuleMapper extends BaseMapper<PromotionRule> {

    /**
     * 插入一个新的促销规则到数据库中。
     *
     * @param promotionRule 要插入的促销规则对象，不能为null
     * @return 影响的行数，如果插入成功则返回1，否则返回0
     */
    @Insert("INSERT INTO promotion_rule (id, condition_type, action_type, threshold, is_active, value)" +
            "VALUES (#{id}, #{conditionType}, #{actionType}, #{threshold}, #{isActive}, #{value})")
    int insert(PromotionRule promotionRule);

    /**
     * 查询所有处于激活状态的促销规则。
     *
     * @return 包含所有激活状态的促销规则的列表
     */
    @Select("SELECT * FROM promotion_rule WHERE is_active = TRUE")
    List<PromotionRule> selectList();

    /**
     * 根据促销规则的ID删除对应的促销规则。
     *
     * <p>如果传入的ID为null，则不会删除任何记录。</p>
     *
     * @param id 要删除的促销规则的ID，可以为null
     * @return 影响的行数，如果删除成功则返回1，否则返回0
     */
    @Delete("DELETE FROM promotion_rule WHERE #{id} IS NULL OR id = #{id}")
    int delete(Long id);

    /**
     * 根据条件和动作类型删除促销规则。
     *
     * @param conditionType 条件类型，不能为null
     * @param actionType    动作类型，不能为null
     * @return 影响的行数，如果删除成功则返回删除的记录数，否则返回0
     */
    @Delete("DELETE FROM promotion_rule WHERE condition_type = #{conditionType} AND action_type = #{actionType}")
    int deleteByConditionAndAction(String conditionType, String actionType);

    /**
     * 更新指定促销规则的激活状态。
     *
     * <p>如果传入的ID为null，则不会更新任何记录。</p>
     *
     * @param id        要更新的促销规则的ID，可以为null
     * @param isActive  新的激活状态，不能为null
     * @return 无返回值
     */
    @Update("UPDATE promotion_rule SET is_active = #{isActive} WHERE #{id} IS NULL OR id = #{id}")
    void updateById(Long id, Boolean isActive);
}//This is a comment, and a comment, and a comment
